package com.ilxqx.framework.util;

import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.RegExUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.util.Assert;

import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.Arrays;

/**
 * SQL文件执行工具类
 * @author venus
 */
public final class SqlFileExecutionUtils {

    /**
     * 根据类相对路径获取文件
     * @param path 相对路径
     * @return 文件对象
     * @throws URISyntaxException 坏的URI
     */
    public static File getFileFromClassPath(String path) throws URISyntaxException {
        URL url = Thread.currentThread().getContextClassLoader().getResource(path);
        Assert.notNull(url, "在[" + path + "]下找不到相应的文件，请检查");
        return new File(url.toURI());
    }

    /**
     * 执行SQL文件
     * @param sqlFile sql文件对象
     * @throws IOException IO异常
     */
    public static void executeSqlFile(File sqlFile) throws IOException {
        JdbcTemplate jdbcTemplate = DbUtils.getJdbcTemplate();
        String ddl = FileUtils.readFileToString(sqlFile, "UTF-8");
        String[] singleSql = StringUtils.split(ddl, ";");
        // 执行
        jdbcTemplate.batchUpdate(Arrays.stream(singleSql).filter(sql -> {
            // 过滤空sql
            String strippedSql = RegExUtils.replaceAll(sql, "[\\s]+", "");
            return StringUtils.isNotBlank(strippedSql);
        }).toArray(String[]::new));
    }

}
